package org.example;

import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        System.out.print("Доход компании: ");
        double income = new Scanner(System.in).nextDouble();
        Company company = new Company(income);

        System.out.println("Нанимаем 180 операторов");
        company.hireAll(Stream.generate(() -> new Operator(company, Math.round(Math.random() * 20000 + 60000)))
                .limit(180)
                .collect(Collectors.toList()));

        System.out.println("Нанимаем 80 менеджеров");
        company.hireAll(Stream.generate(() -> new Manager(company, Math.round(Math.random() * 20000 + 80000)))
                .limit(80)
                .collect(Collectors.toList()));

        System.out.println("Нанимаем 10 топ-менеджеров");
        company.hireAll(Stream.generate(() -> new TopManager(company, Math.round(Math.random() * 20000 + 100000)))
                .limit(10)
                .collect(Collectors.toList()));

        System.out.println("Выводим список 15 самых высоких зарплат в компании");
        company.getTopSalaryStaff(15)
                .stream()
                .map(Employee::getMonthSalary)
                .map((s) -> s + " руб.")
                .forEach(System.out::println);

        System.out.println("Выводим список 30 самых низких зарплат в компании");
        company.getLowestSalaryStaff(30)
                .stream()
                .map(Employee::getMonthSalary)
                .map((s) -> s + " руб.")
                .forEach(System.out::println);

        System.out.println("Увольняем 50% сотрудников");
        List<Employee> list = company.getStaff();
        for (int i = 0; i < list.size(); i += 2) {
            company.fire(list.get(i));
        }

        System.out.println("Выводим список 15 самых высоких зарплат в компании");
        company.getTopSalaryStaff(15)
                .stream()
                .map(Employee::getMonthSalary)
                .map((s) -> s + " руб.")
                .forEach(System.out::println);

        System.out.println("Выводим список 30 самых низких зарплат в компании");
        company.getLowestSalaryStaff(30)
                .stream()
                .map(Employee::getMonthSalary)
                .map((s) -> s + " руб.")
                .forEach(System.out::println);
    }
}